perm filename BITS2[OLD,LCS] blob sn#028052 filedate 1974-01-08 generic text, type T, neo UTF8
	TITLE	BITS	;DEB, 11/13/69

;	ROUTINE WITH 3 ENTRY POINTS:
;		CALL BITS (I)
;			I=12  -  12-BIT SAMPLES
;			I=18  -  18-BIT SAMPLES
;		CALL UNPACK (IBOTT,NORM)
;			IF I=12, MOVE 3 12-BIT BYTES INTO
;			   NORM(1),NORM(2),NORM(3) FROM IBOTT(1)
;			IF I=18, MOVE 6 18-BIT BYTES INTO
;			   NORM(1)...NORM(6) FROM IBOTT(1)...IBOTT(3)
;		CALL REPACK (IBOTT,NORM)
;			IF I=12, PACK NORM(1),NORM(2),NORM(3) INTO
;			   3 12-BIT BYTES OF IBOTT
;			IF I=18, PACK NORM(1)...NORM(6) INTO
;			   6 12-BIT BYTES OF IBOTT(1),IBOTT(2)

	INTERNAL	BITS,UNPACK,REPACK

X	←	2	;LOOP AND INDEX
T	←	3	;BASE OF IBOTT

BITS:	0
	MOVE	X,@0(16)	;PICK UP BIT SIZE
	MOVE	1,[XWD 441400,-3] ;FOR 12-BIT BYTES
	CAIE	X,=12		;IS IT 12⎇
	MOVE	1,[XWD 442200,-6] ;FOR 18-BIT BYTES
	MOVEM	1,IDX#		;SAVE IT FOR PACK ROUTINES
	JRA	16,1(16)	;RETURN

UNPACK:	0
	MOVE	T,0(16)		;BASE OF IBOTT
	HLL	T,IDX		;MOVE BIT-SIZE INTO LEFT PART OF T
	MOVE	X,1(16)		;BASE OF NORM
	HRL	X,IDX		;SET UP LOOP AND INDEX FOR AOBJN
LOOP1:
	ILDB	1,T		;PICK UP BYTE
	LSH	1,=24		;PROPAGATE SIGN
	ASH	1,-=24	;RIGHT SHIFT
	MOVEM	1,(X)		;MOVE INTO NORM(I)
	AOBJN	X,LOOP1		;CONTINUE (3 OR 6 TIMES)
	JRA	16,2(16)

REPACK:	0
	MOVE	T,0(16)		;BASE OF IBOTT (DESTINATION)
	HRLI	T,441400	;12-BIT BYTE SIZE
	MOVE	X,1(16)		;BASE OF NORM (SOURCE)
	HRL	X,IDX		;LOOP INDEX
LOOP2:
	MOVE	1,(X)		;PICK UP NORM(I)
	IDPB	1,T		;DEPOSIT IN 12 BITS OF IBOTT
	AOBJN	X,LOOP2		;CONTINUE (3 OR 6 TIMES)
	JRA	16,2(16)

	END